A common need of software applications is a persistent database in which data can be stored. For example, a supplier of auto parts may need to store and manage information about parts, customers, orders, and other entities. In addition, the data may need to be accessible by multiple users and applications simultaneously. The data also need to be administered so that specific information can easily and efficiently be found amongst large amounts of data, and the data should not be lost if power to the computer system is turned off. To address these needs, DBMSs are used to store and provide access to data. A DBMS can typically receive data from one or more users and/or software applications, store said data for extended periods of time and provide that data to the same or other software applications and/or users. DBMSs also typically store the data on computer-readable media that do not lose their contents if they lose power.
Another common need of software applications is an object oriented computer language runtime in which applications can be executed. An example of a computer language runtime is a virtual machine such as for example a Java Virtual Machine or the Microsoft .NET Common Language Runtime. Another example of a computer language runtime is compiler created machine code processed by one or more processors at runtime together with runtime libraries, as may be the case with, for example, C++ applications.
A common goal of DBMSs is to provide high performance in terms of transaction throughput and transaction latency to minimize hardware cost, wait time and increase the number of transactions per unit of time. Even with large investments in hardware, achieving the desired performance is often expensive and sometimes may not possible. Another common goal of DBMSs is to reduce complexity with respect to the application development process and thus save time and money and reduce the risk of errors. Development of database application is a complex, time consuming, error-prone and costly process.